﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace CuboVideo
{
    class Camera
    {
        Vector3 Posicao;
        Vector3 Alvo;
        Vector3 Orientacao;

        public Camera()
        {
            Posicao = new Vector3(10, 10, 10);
            Alvo = Vector3.Zero;
            Orientacao = Vector3.Up;

            AnguloAbertura = 45;
            RazaoTela = 4 / 3;
            PlanoPerto = 1;
            PlanoLonge = 100;

            DistanciaJogador = Vector3.Zero;//sugestao: (0,10,15)
            DistanciaAlvo = Vector3.Zero;

            MatrixVistualizacao = Matrix.CreateLookAt(posicao, alvo, orientacao);

            MatrizProjecao = Matrix.CreatePerspectiveFieldOfView(
                MathHelper.ToRadians(anguloAbertura),
                razaoTela,
                planoPerto,
                planoLonge);
        }

        public void Update(float anguloRotacao, Vector3 _posicao)
        {
            Matrix matrizRotacao = Matrix.CreateRotationY(anguloRotacao);

            Vector3 distanciaCorrigida = Vector3.Transform(DistanciaJogador, matrizRotacao);
            Vector3 alvoCorrigido = Vector3.Transform(DistanciaAlvo, matrizRotacao);

            Posicao = _posicao + distanciaCorrigida;
            Alvo = _posicao + alvoCorrigido;

            MatrizVisualizacao = Matrix.CreateLookAt(Posicao, Alvo, Orientacao);

            MatrizProjecao = Matrix.CreatePerspectiveFieldOfView(
                MathHelper.ToRadians(AnguloAbertura),
                RazaoTela,
                PlanoPerto,
                PlanoLonge);
        }
    }
}
